﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLL_MechSys;
using DTO_MechSys;

namespace FORMS_MechSys
{
    public partial class frmFornecedorCadastro : Form
    {
        BLLFornecedor bllFornecedor = new BLLFornecedor();
        DTOFornecedor dtoFornecedor = new DTOFornecedor();
        BLLEndereco bllEndereco = new BLLEndereco();
        DTOEndereco dtoEndereco = new DTOEndereco();
        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();
        BLLCor bllCor = new BLLCor();
        BLLUnidadeFederal bllUnidadeFederal = new BLLUnidadeFederal();
        DataTable dataTableGridView = new DataTable();

        
        


        int fornecedorID, enderecoID;

        public frmFornecedorCadastro()
        {
            InitializeComponent();
            PopulaGrid();
            Habilitar(false);
            tlpEndereco.Visible = false;

            cmbEstado.DataSource = bllUnidadeFederal.BuscarEstadosCadastrados();
            SetColors();
            cmbEstado.DisplayMember = "Nome";
            cmbEstado.ValueMember = "UFID";
        }

        private void SetColors()
        {
            dtoCorPrincipal = bllCor.Buscar("Principal");

            btnCancelar.BackColor = tlpDados.BackColor = tlpEndereco.BackColor = tlpPrincipal.BackColor = tlpMenuStripLeft.BackColor =
                tlpMenuStripRigth.BackColor = gpbEndereco.BackColor = tlpMenuStripCenter.BackColor = label4.BackColor = 
                btnExpandir.BackColor = tableLayoutPanel6.BackColor = btnSair.BackColor =
                tableLayoutPanel3.BackColor = tableLayoutPanel4.BackColor = btnPesquisar.BackColor = btnNovo.BackColor =
                btnSalvar.BackColor = btnEditar.BackColor = btnExcluir.BackColor = btnExcluir.BackColor = dtoCorPrincipal.Cor;

            dtoCorFundo = bllCor.Buscar("Fundo");
            tlpMenuStrip.BackColor = 
            tlpPrincipal.BackColor = dtoCorFundo.Cor;

            dtoCorDataGrid = bllCor.Buscar("DataGrid");
            dtGridFornecedores.BackgroundColor = dtoCorDataGrid.Cor;

            dtoCorLetra = bllCor.Buscar("Letra");
            label10.ForeColor = label11.ForeColor = label14.ForeColor =
                label15.ForeColor = label8.ForeColor = label20.ForeColor = label9.ForeColor =
                label4.ForeColor = label5.ForeColor = label7.ForeColor = label21.ForeColor = gpbEndereco.ForeColor =
               btnNovo.ForeColor = btnSalvar.ForeColor = btnSair.ForeColor = groupBox2.ForeColor = label22.ForeColor =
                btnEditar.ForeColor = btnCancelar.ForeColor = btnExcluir.ForeColor = dtoCorLetra.Cor;
        }
        public void Limpar()
        {
            txtRazao.Clear();
            msktxtCNPJ.Clear();
            msktxtTel.Clear();
            msktxtTel2.Clear();
            txtEmail.Clear();
            txtSite.Clear();
            txtNomeRep.Clear();
            msktxtTelRep.Clear();
            msktxtCelRep.Clear();
            txtEmailRep.Clear();
            txtRua.Clear();
            txtNumero.Clear();
            txtBairro.Clear();
            txtComplemento.Clear();
            txtCidade.Clear();
            cmbEstado.SelectedItem = null;
            msktxtCEP.Clear();
        }

        public void Habilitar(bool status)
        {
            tlpDados.Enabled = status;
            gpbEndereco.Enabled = status;
            btnNovo.Enabled = !status;
            btnCancelar.Enabled = status;
            btnSalvar.Enabled = status;
        }

        public void PopulaGrid()
        {
            DataRow dataRow;
            dataTableGridView = new DataTable();

            List<DTOFornecedor> ListFornecedor = bllFornecedor.BuscarFornecedoresCadastrados();

            try
            {
                if (ListFornecedor.Count > 0)
                {                  

                    dataTableGridView.Columns.Add("FornecedorID", typeof(int));
                    dataTableGridView.Columns.Add("Razao", typeof(string));
                    dataTableGridView.Columns.Add("CNPJ", typeof(string));
                    dataTableGridView.Columns.Add("Telefone", typeof(string));
                    dataTableGridView.Columns.Add("Telefone2", typeof(string));
                    dataTableGridView.Columns.Add("Email", typeof(string));
                    dataTableGridView.Columns.Add("Site", typeof(string));
                    dataTableGridView.Columns.Add("Representante", typeof(string));
                    dataTableGridView.Columns.Add("RepTelefone", typeof(string));
                    dataTableGridView.Columns.Add("RepCelular", typeof(string));
                    dataTableGridView.Columns.Add("RepEmail", typeof(string));                    
                    dataTableGridView.Columns.Add("EnderecoID", typeof(int));


                    foreach (DTOFornecedor dtoFornecedor in ListFornecedor)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["FornecedorID"] = dtoFornecedor.FornecedorID;
                        dataRow["Razao"] = dtoFornecedor.Razao;
                        dataRow["CNPJ"] = dtoFornecedor.CNPJ;
                        dataRow["Telefone"] = dtoFornecedor.Telefone;
                        dataRow["Telefone2"] = dtoFornecedor.Telefone2;                      
                        dataRow["Email"] = dtoFornecedor.Email;
                        dataRow["Site"] = dtoFornecedor.Site;
                        dataRow["Representante"] = dtoFornecedor.Representante;
                        dataRow["RepTelefone"] = dtoFornecedor.RepresentanteTelefone;
                        dataRow["RepCelular"] = dtoFornecedor.RepresentanteCelular;
                        dataRow["RepEmail"] = dtoFornecedor.RepresentanteEmail;
                        dataRow["EnderecoID"] = dtoFornecedor.EnderecoID;


                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

                dtGridFornecedores.DataSource = dataTableGridView;
            }
            catch (Exception)
            {
                if ((new frmMessageBox().Show("Não foi possível carregar os dados para o grid!", "Carregamento", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry))
                {
                    PopulaGrid();
                }
            }            
        }

        public void PopulaGrid(string texto)
        {
            DataRow dataRow;
            dataTableGridView = new DataTable();

            List<DTOFornecedor> ListFornecedor = bllFornecedor.PesquisarFornecedores(texto);

            try
            {
                if (ListFornecedor.Count > 0)
                {

                    dataTableGridView.Columns.Add("FornecedorID", typeof(int));
                    dataTableGridView.Columns.Add("Razao", typeof(string));
                    dataTableGridView.Columns.Add("CNPJ", typeof(string));
                    dataTableGridView.Columns.Add("Telefone", typeof(string));
                    dataTableGridView.Columns.Add("Telefone2", typeof(string));
                    dataTableGridView.Columns.Add("Email", typeof(string));
                    dataTableGridView.Columns.Add("Site", typeof(string));
                    dataTableGridView.Columns.Add("Representante", typeof(string));
                    dataTableGridView.Columns.Add("RepTelefone", typeof(string));
                    dataTableGridView.Columns.Add("RepCelular", typeof(string));
                    dataTableGridView.Columns.Add("RepEmail", typeof(string));
                    dataTableGridView.Columns.Add("EnderecoID", typeof(int));


                    foreach (DTOFornecedor dtoFornecedor in ListFornecedor)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["FornecedorID"] = dtoFornecedor.FornecedorID;
                        dataRow["Razao"] = dtoFornecedor.Razao;
                        dataRow["CNPJ"] = dtoFornecedor.CNPJ;
                        dataRow["Telefone"] = dtoFornecedor.Telefone;
                        dataRow["Telefone2"] = dtoFornecedor.Telefone2;
                        dataRow["Email"] = dtoFornecedor.Email;
                        dataRow["Site"] = dtoFornecedor.Site;
                        dataRow["Representante"] = dtoFornecedor.Representante;
                        dataRow["RepTelefone"] = dtoFornecedor.RepresentanteTelefone;
                        dataRow["RepCelular"] = dtoFornecedor.RepresentanteCelular;
                        dataRow["RepEmail"] = dtoFornecedor.RepresentanteEmail;
                        dataRow["EnderecoID"] = dtoFornecedor.EnderecoID;


                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

                dtGridFornecedores.DataSource = dataTableGridView;
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Registro não encontrado!", "Pesquisa", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }        
              
        private void btnNovo_Click_1(object sender, EventArgs e)
        {
            fornecedorID = 0;
            Habilitar(true);
            Limpar();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            Habilitar(true);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Limpar();
            Habilitar(false);
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(fornecedorID.ToString()))
            {
                if (new frmMessageBox().Show("Deseja realmente excluir o fornecedor " + txtRazao.Text + "?", "Exclusão", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    try
                    {
                        bllFornecedor.Excluir(fornecedorID);
                        bllEndereco.Excluir(enderecoID);
                        new frmMessageBox().Show("Fornecedor excluído com sucesso!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Limpar();

                        PopulaGrid();
                    }
                    catch
                    {
                        new frmMessageBox().Show("Não foi possível excluir o fornecedor!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                }
            }
            else
            {
                new frmMessageBox().Show("Selecione um fornecedor para excluir!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void btnSalvar_Click_1(object sender, EventArgs e)
        {
            if (bllFornecedor.VerificaSeFornecedorIDExiste(fornecedorID) == false)
            {                
                try
                {

                    dtoEndereco.Rua = txtRua.Text;
                    dtoEndereco.Numero = txtNumero.Text;
                    dtoEndereco.Bairro = txtBairro.Text;
                    dtoEndereco.Complemento = txtComplemento.Text;
                    dtoEndereco.Cidade = txtCidade.Text;
                    dtoEndereco.Estado = (int)cmbEstado.SelectedValue;
                    dtoEndereco.CEP = msktxtCEP.Text.Replace("-", "");
                    
                    bllEndereco.Inserir(dtoEndereco);

                    int enderecoID = bllEndereco.BuscarUltimoEnderecoID();

                    dtoFornecedor.Razao = txtRazao.Text;
                    dtoFornecedor.CNPJ = msktxtCNPJ.Text.Replace(".", "").Replace("-", "").Replace("/", "");
                    dtoFornecedor.Telefone = msktxtTel.Text.Replace("-", "").Trim();
                    dtoFornecedor.Telefone2 = msktxtTel2.Text.Replace("-", "").Trim();
                    dtoFornecedor.Email = txtEmail.Text;
                    dtoFornecedor.Site = txtSite.Text;
                    dtoFornecedor.Representante = txtNomeRep.Text;                    
                    dtoFornecedor.RepresentanteTelefone = msktxtTelRep.Text.Replace("-", "");
                    dtoFornecedor.RepresentanteCelular = msktxtCelRep.Text.Replace("-", "");
                    dtoFornecedor.RepresentanteEmail = txtEmailRep.Text;
                    dtoFornecedor.EnderecoID = enderecoID;

                    if (!string.IsNullOrEmpty(txtRazao.Text) && !string.IsNullOrEmpty(msktxtTel.Text) && !string.IsNullOrEmpty(txtNomeRep.Text))
                    {
                        bllFornecedor.Inserir(dtoFornecedor);
                        new frmMessageBox().Show("Fornecedor cadastrado com sucesso!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Limpar();
                        Habilitar(false);
                        PopulaGrid();
                    }
                    else
                    {
                        new frmMessageBox().Show("Os campos Razao, Telefone e Nome são obrigatórios!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
                catch (Exception)
                {
                    new frmMessageBox().Show("Não foi possível cadastrar o fornecedor!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                Atualizar();
            }
        }

        private void Atualizar()
        {            
            try
            {
                dtoEndereco.Rua = txtRua.Text;
                dtoEndereco.Numero = txtNumero.Text;
                dtoEndereco.Bairro = txtBairro.Text;
                dtoEndereco.Complemento = txtComplemento.Text;
                dtoEndereco.Cidade = txtCidade.Text;
                dtoEndereco.Estado = (int)cmbEstado.SelectedValue;
                dtoEndereco.CEP = msktxtCEP.Text.Replace("-", "");

                bllEndereco.Inserir(dtoEndereco);

                int enderecoID = bllEndereco.BuscarUltimoEnderecoID();

                dtoFornecedor.FornecedorID = fornecedorID;
                dtoFornecedor.Razao = txtRazao.Text;
                dtoFornecedor.CNPJ = msktxtCNPJ.Text.Replace(".", "").Replace("-", "").Replace("/", "");
                dtoFornecedor.Telefone = msktxtTel.Text.Replace("-", "").Trim();
                dtoFornecedor.Telefone2 = msktxtTel2.Text.Replace("-", "").Trim();
                dtoFornecedor.Email = txtEmail.Text;
                dtoFornecedor.Site = txtSite.Text;
                dtoFornecedor.Representante = txtNomeRep.Text;
                dtoFornecedor.RepresentanteTelefone = msktxtTelRep.Text.Replace("-", "");
                dtoFornecedor.RepresentanteCelular = msktxtCelRep.Text.Replace("-", "");
                dtoFornecedor.RepresentanteEmail = txtEmailRep.Text;
                dtoFornecedor.EnderecoID = enderecoID;

                if (!string.IsNullOrEmpty(txtRazao.Text) && !string.IsNullOrEmpty(msktxtTel.Text) && !string.IsNullOrEmpty(txtNomeRep.Text))
                {
                    bllFornecedor.Atualizar(dtoFornecedor);
                    new frmMessageBox().Show("Fornecedor atualizado com sucesso!", "Atualização", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Limpar();
                    Habilitar(false);
                    PopulaGrid();                    
                }
                else
                {
                    new frmMessageBox().Show("Os campos Razao, Telefone e Nome são obrigatórios!", "Atualização", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Não foi possível atualizar o fornecedor!", "Atualização", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dtGridFornecedores_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                
                if(!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["FornecedorIDD"].Value.ToString()))
                fornecedorID = (int)dtGridFornecedores.Rows[e.RowIndex].Cells["FornecedorIDD"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["Razao"].Value.ToString()))
                txtRazao.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["Razao"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["CNPJ"].Value.ToString()))
                msktxtCNPJ.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["CNPJ"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["Telefone"].Value.ToString()))
                msktxtTel.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["Telefone"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["Telefone2"].Value.ToString()))
                msktxtTel2.Text = dtGridFornecedores.Rows[e.RowIndex].Cells["Telefone2"].Value.ToString();
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["Email"].Value.ToString()))
                txtEmail.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["Email"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["Site"].Value.ToString()))
                txtSite.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["Site"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["Representante"].Value.ToString()))
                txtNomeRep.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["Representante"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["RepTelefone"].Value.ToString()))
                msktxtTelRep.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["RepTelefone"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["RepCelular"].Value.ToString()))
                msktxtCelRep.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["RepCelular"].Value;
                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["RepEmail"].Value.ToString()))
                txtEmailRep.Text = (string)dtGridFornecedores.Rows[e.RowIndex].Cells["RepEmail"].Value;


                if (!string.IsNullOrEmpty(dtGridFornecedores.Rows[e.RowIndex].Cells["EnderecoID"].Value.ToString()))
                enderecoID = (int)dtGridFornecedores.Rows[e.RowIndex].Cells["EnderecoID"].Value;
                DTOEndereco enderecoCliente = bllEndereco.BuscarEnderecoPorEnderecoID(enderecoID);

                txtRua.Text = enderecoCliente.Rua;
                txtNumero.Text = enderecoCliente.Numero;
                txtBairro.Text = enderecoCliente.Bairro;
                txtComplemento.Text = enderecoCliente.Complemento;
                txtCidade.Text = enderecoCliente.Cidade;
                cmbEstado.Text = bllUnidadeFederal.BuscarEstadosPorUFID(enderecoCliente.Estado).Nome;
                msktxtCEP.Text = enderecoCliente.CEP;


                Habilitar(false);
                btnEditar.Enabled = true;
            }
        }

        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnPesquisar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtPesquisar.Text))
            {
                PopulaGrid(txtPesquisar.Text);
            }
        }

        private void msktxtCNPJ_Leave(object sender, EventArgs e)
        {
            string cnpj = msktxtCNPJ.Text.Replace(".", "").Replace("-", "").Replace("/", "");

            if (BLLUtilitarios.IsCnpj(cnpj) == false)
            {
                new frmMessageBox().Show("CNPJ Inválido! Insira novamente o valor", "Validação do CNPJ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                msktxtCNPJ.Focus();
            }          
        }

        private void btnExpandir_Click(object sender, EventArgs e)
        {
            if (tlpPrincipal.RowStyles[1].Height == 260)
            {
                tlpPrincipal.RowStyles[1] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 374F));
                tlpEndereco.Visible = true;
            }
            else
            {
                tlpPrincipal.RowStyles[1] = (new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 260F));
                tlpEndereco.Visible = false;
            }
        }
    }
}
